1. Technical Field
The present disclosure relates to software obfuscation and more specifically to minimizing overhead associated with inlined function calls.
2. Introduction
Software publishers often attempt to restrict access to portions of compiled software executables to thwart would-be reverse engineering while still allowing the executables to function properly. Reverse engineering is the practice of dissecting and/or analyzing software to understand how it works. On certain systems, reverse engineering can retrieve information stored within software such as information related to cryptographic keys or copy protection schemes. Reverse engineers can even tamper with the software itself or call specific portions of the software for unauthorized purposes.
One approach to thwart reverse engineering and other attacks is to reduce the number of entry points into a program or dynamically linked library (DLL). This can be accomplished by inlining tasks that were previously separate functions. However, for large and/or commonly used functions, this approach quickly leads to code bloat. The resulting bloated code can exceed stack and function size limits. Further, such code can be difficult to maintain because a single change to one inlined segment must be propagated through all the remaining inlined segments in the code. Further, an attacker can compare portions of the code which are the same (i.e. inlined) for clues as to the code's purpose and how it is used.